📖 SAGEMATH NOTEBOOK¶

(Phần 1. Tổng hợp các câu lệnh cơ bản và nâng cao trong SageMath)¶

💡 Thông tin tài liệu¶

  • Tài liệu được đính kèm theo Đồ án 1, đề tài: "Hướng dẫn sử dụng phần mềm SageMath và ứng dụng trong các học phần Toán đại cương"

    (Link toàn văn Đồ án: SageMath-Tutorial.

  • Thực hiện bởi: Nguyễn Trung Kiên (20227180, Khoa Toán - Tin, Đại học Bách Khoa Hà Nội)

  • Giảng viên hướng dẫn: TS. Lê Văn Tứ

Mọi ý kiến đóng góp, thắc mắc hoặc phản hồi, vui lòng gửi về trang cá nhân (Facebook): Nguyễn Trung Kiên và hòm thư điện tử: kiennt.ethan@gmail.com để được hỗ trợ sớm nhất.

Xin chân thành cảm ơn!


🛠️ Hướng dẫn sử dụng Notebook¶

  1. Cài SageMath và Jupyter Notebook, hoặc truy cập trực tuyến:

    • Trang chủ SageCell của SageMath (đơn giản, không cần cài đặt)
    • Trang chủ Cocalc (có thể mở file .ipynb trực tuyến)
  2. Mở file SageMath_Tutorial.ipynb bằng Jupyter Notebook hoặc upload lên CoCalc.

  3. Nhấn Shift + Enter tại mỗi ô để chạy lệnh SageMath.

Một số ô cần vài giây để xử lý, đặc biệt là các ô có biểu đồ.

In [6]:
# Kiem tra SageMath da duoc cai dat
version()
Out[6]:
'SageMath version 10.5, Release Date: 2024-12-04'

Ngôn ngữ và biểu thức cơ bản trong SageMath¶

SageMath sử dụng cú pháp gần giống Python, hỗ trợ tính toán toán học mạnh mẽ.

Cú pháp cơ bản¶

  • Phân biệt chữ hoa và chữ thường.
  • Không cần ; kết thúc dòng.
  • Hỗ trợ toán tử: +, -, *, /, ^, **.
  • Dùng show() để hiển thị kết quả đẹp.

Kiểu dữ liệu phổ biến¶

  • Số nguyên, số thực, chuỗi, danh sách, boolean.
In [20]:
# Khai bao bien co ban
a = 10          # So nguyen
b = 3.14        # So thuc
c = "SageMath"  # Chuoi
lst = [1, 2, 3] # Danh sach
flag = True     # Boolean

a, b, c, lst, flag
Out[20]:
(10, 3.14000000000000, 'SageMath', [1, 2, 3], True)

Phép toán cơ bản¶

In [19]:
# Phep toan so hoc
x = 2
y = 5
x + y, x * y, x^y, x**y, pow(x, y)
Out[19]:
(7, 10, 32, 32, 32)
In [21]:
#### Hiển thị kết quả với `show()`
In [22]:
# Hien thi bieu thuc va ma tran
var('x')
f = x^2 + 2*x + 1
show(f)

M = matrix([[1, 2], [3, 4]])
show(M)
\(\displaystyle x^{2} + 2 \, x + 1\)
\(\displaystyle \left(\begin{array}{rr} 1 & 2 \\ 3 & 4 \end{array}\right)\)

Đại số, Giải tích và Hình học trong SageMath¶

SageMath hỗ trợ nhiều công cụ mạnh mẽ cho Đại số, Giải tích và Hình học, từ biểu thức đại số đến vẽ hình không gian.

1. Đại số: Biểu thức, đa thức, khai triển, rút gọn¶

In [31]:
# Khai bao bien va bieu thuc
var('x y')
f = (x + y)^3
In [32]:
# Khai trien bieu thuc
expand(f)
Out[32]:
x^3 + 3*x^2*y + 3*x*y^2 + y^3
In [33]:
# Rut gon bieu thuc
g = (x^2 - 1)/(x - 1)
simplify(g)
Out[33]:
(x^2 - 1)/(x - 1)

2. Phân tích đa thức: nhân tử, chia đa thức¶

In [29]:
# Phan tich nhan tu
h = x^2 - 5*x + 6
factor(h)
Out[29]:
(x - 2)*(x - 3)

3. Giải phương trình đại số¶

In [34]:
# Giai phuong trinh bac hai
solve(x^2 - 5*x + 6 == 0, x)
Out[34]:
[x == 3, x == 2]
In [35]:
# Giai he phuong trinh
var('x y')
solve([x + y == 4, x - y == 2], x, y)
Out[35]:
[[x == 3, y == 1]]

4. Giải tích: đạo hàm, tích phân, giới hạn¶

In [36]:
# Dao ham
f = sin(x^2)
diff(f, x)
Out[36]:
2*x*cos(x^2)
In [37]:
# Dao ham cap cao
diff(f, x, 2)
Out[37]:
-4*x^2*sin(x^2) + 2*cos(x^2)
In [38]:
# Tich phan bat dinh
integrate(exp(-x^2), x)
Out[38]:
1/2*sqrt(pi)*erf(x)
In [39]:
# Tich phan xac dinh
integrate(x^2, (x, 0, 2))
Out[39]:
8/3
In [41]:
# Gioi han
limit(1/x, x=0, dir='right')
Out[41]:
+Infinity

Các phép toán số phức trong SageMath¶

SageMath hỗ trợ đầy đủ các phép toán với số phức bao gồm cộng, trừ, nhân, chia, tính mô-đun, liên hợp, căn bậc hai, nghiệm phức, v.v.

1. Khai báo và các phép toán cơ bản với số phức¶

In [55]:
# Khai bao so phuc
z1 = 2 + 3*I
z2 = 1 - I
In [56]:
# Cong, tru, nhan, chia
z1 + z2
z1 - z2
z1 * z2
z1 / z2
Out[56]:
5/2*I - 1/2

2. Tính mô-đun, phần thực, phần ảo, liên hợp¶

In [57]:
# Mo-dun (module) cua so phuc
abs(z1)
Out[57]:
sqrt(13)
In [58]:
# Phan thuc va phan ao
real(z1)
imag(z1)
Out[58]:
3
In [59]:
# Lien hop
z1.conjugate()
Out[59]:
-3*I + 2

3. Căn bậc hai và lũy thừa của số phức¶

In [60]:
# Can bac hai cua so phuc
sqrt(z1)
Out[60]:
sqrt(3*I + 2)
In [62]:
# Luy thua so phuc
z1^2
Out[62]:
12*I - 5

4. Chuyển đổi số phức sang dạng lượng giác¶

In [66]:
# Chuyen sang dang luong giac (polar form)
z = 1 + I
r = abs(z)
theta = arg(z)  # goc
(r, theta)
Out[66]:
(sqrt(2), 1/4*pi)

5. Nghiệm phức của phương trình¶

In [69]:
# Giai phuong trinh co nghiem phuc
var('x')
solve(x^2 + 1 == 0, x)
Out[69]:
[x == -I, x == I]

6. Vẽ số phức trên mặt phẳng Argand¶

In [71]:
# Ve cac so phuc tren mat phang
G = list_plot([(real(z1), imag(z1)), (real(z2), imag(z2))], 
              plotjoined=False, marker='o', color='blue', 
              axes_labels=['Re', 'Im'], aspect_ratio=1)
G.show()
No description has been provided for this image

Hình học trong SageMath¶

SageMath hỗ trợ trực quan hóa hình học phẳng (2D) và không gian (3D) với các công cụ mạnh mẽ như point, line, circle, plot, parametric_plot, plot3d, implicit_plot3d.

1. Vẽ điểm và đoạn thẳng trên mặt phẳng (2D)¶

In [74]:
# Ve mot diem
p = point((2, 3), color='red', size=30)

# Ve mot doan thang
l = line([(0, 0), (2, 3)], thickness=2, color='blue')

# Hien thi dong thoi
(p + l).show()
No description has been provided for this image

2. Vẽ đường tròn, ellipse và parabol¶

In [75]:
# Duong tron tam (0, 0), ban kinh 2
circle((0, 0), 2, color='green').show()

# Ve elip bang parametric_plot
t = var('t')
ellipse = parametric_plot((3*cos(t), 2*sin(t)), (t, 0, 2*pi), color='purple')
ellipse.show()
No description has been provided for this image
No description has been provided for this image

3. Vẽ đồ thị hàm số trong không gian 2D¶

In [76]:
# Ve ham y = sin(x) tren [-pi, pi]
x = var('x')
plot(sin(x), (x, -pi, pi), color='orange', thickness=2).show()
No description has been provided for this image

4. Vẽ mặt phẳng và hàm số 3D¶

In [77]:
# Ve ham z = x^2 - y^2 tren mien [-2,2] x [-2,2]
x, y = var('x y')
plot3d(x^2 - y^2, (x, -2, 2), (y, -2, 2), color='cyan')
Out[77]:

5. Vẽ mặt cầu, mặt trụ, mặt nón¶

In [78]:
# Mat cau tam goc, ban kinh 1
x, y, z = var('x y z')
implicit_plot3d(x^2 + y^2 + z^2 == 1, (x, -1.5, 1.5), (y, -1.5, 1.5), (z, -1.5, 1.5), color='skyblue')
Out[78]:
In [79]:
# Mat tru: x^2 + y^2 = 1
implicit_plot3d(x^2 + y^2 == 1, (x, -1, 1), (y, -1, 1), (z, -2, 2), color='green')
Out[79]:

6. Vẽ véc-tơ trong mặt phẳng¶

In [80]:
# Ve vector tu goc (0,0) den diem (2,3)
arrow((0, 0), (2, 3), color='red', width=2).show()
No description has been provided for this image

Làm việc với ma trận trong SageMath¶

SageMath hỗ trợ thao tác với ma trận: khai báo, cộng trừ nhân, tìm định thức, ma trận nghịch đảo, hạng, chuyển vị, ma trận mũ, hệ phương trình, v.v.

1. Khởi tạo ma trận¶

In [81]:
# Tao ma tran 2x2
A = matrix([[1, 2], [3, 4]])
show(A)
\(\displaystyle \left(\begin{array}{rr} 1 & 2 \\ 3 & 4 \end{array}\right)\)

2. Các phép toán cơ bản với ma trận¶

In [82]:
B = matrix([[2, 0], [1, 2]])

A + B          # Cong
A - B          # Tru
A * B          # Nhan
2 * A          # Nhan voi so
A.transpose()  # Chuyen vi
Out[82]:
[1 3]
[2 4]

3. Tính định thức, nghịch đảo, hạng ma trận¶

In [84]:
A.det()        # Dinh thuc
A.inverse()    # Ma tran nghich dao
A.rank()       # Hang cua ma tran
Out[84]:
2

4. Tính ma trận mũ và khai triển¶

In [87]:
A^2            # Luy thua A mu 2
A.exp()        # Ma tran mu e^A
Out[87]:
[-1/22*((sqrt(33) - 11)*e^sqrt(33) - sqrt(33) - 11)*e^(-1/2*sqrt(33) + 5/2)              2/33*(sqrt(33)*e^sqrt(33) - sqrt(33))*e^(-1/2*sqrt(33) + 5/2)]
[             1/11*(sqrt(33)*e^sqrt(33) - sqrt(33))*e^(-1/2*sqrt(33) + 5/2)  1/22*((sqrt(33) + 11)*e^sqrt(33) - sqrt(33) + 11)*e^(-1/2*sqrt(33) + 5/2)]

5. Giải hệ phương trình tuyến tính¶

In [89]:
# He: x + 2y = 3, 3x + 4y = 7
A = matrix([[1, 2], [3, 4]])
b = vector([3, 7])
x = A.solve_right(b)   # Giai he Ax = b
show(x)
\(\displaystyle \left(1,\,1\right)\)

6. Kiểm tra độc lập tuyến tính của các vector hàng / cột¶

In [ ]:
A.is_linearly_independent()        # Kiem tra vector hang
A.columns().is_linearly_independent()  # Vector cot

7. Tìm cơ sở và không gian sinh¶

In [92]:
A.row_space()      # Khong gian hang
A.column_space()   # Khong gian cot
Out[92]:
Free module of degree 2 and rank 2 over Integer Ring
Echelon basis matrix:
[1 1]
[0 2]

8. Tính giá trị riêng và vector riêng¶

In [94]:
A.eigenvalues()        # Gia tri rieng
A.eigenvectors_right() # Vector rieng
Out[94]:
[(-0.3722813232690144?, [(1, -0.6861406616345072?)], 1),
 (5.372281323269015?, [(1, 2.186140661634508?)], 1)]

9. Chéo hóa ma trận¶

In [ ]:
A.diagonalization()    # Cheo hoa (neu duoc)

10. Ma trận chuyển cơ sở¶

In [96]:
# Xac dinh ma tran chuyen co so tu B -> C
B = [vector([1, 0]), vector([1, 1])]
C = [vector([2, 1]), vector([1, 1])]
P = matrix(B).solve_right(matrix(C))
show(P)  # Ma tran chuyen tu co so B sang C
\(\displaystyle \left(\begin{array}{rr} 2 & 1 \\ -1 & 0 \end{array}\right)\)

Tính toán đại số trừu tượng trong SageMath¶

SageMath hỗ trợ các đối tượng đại số như nhóm, vành, trường, và đa thức.

1. Làm việc với nhóm (Group)¶

In [97]:
G = SymmetricGroup(3)  # Nhom doi xung bac 3 (S3)
G.list()               # Liet ke cac phan tu
G.order()              # Bac cua nhom
G.is_abelian()         # Kiem tra co phai nhom abel
Out[97]:
False

2. Đa thức trong vành đa thức¶

In [99]:
R.<x> = PolynomialRing(QQ)    # Vanh da thuc bac 1 tren Q
f = x^3 + 2*x + 1
g = x^2 - 1
f + g, f * g, f % g           # Cong, nhan, chia lay du
Out[99]:
(x^3 + x^2 + 2*x, x^5 + x^3 + x^2 - 2*x - 1, 3*x + 1)

3. Khai báo trường hữu hạn (Finite Field)¶

In [101]:
F = GF(7)         # Truong huu han modulo 7
a = F(3)
b = F(5)
a + b, a * b, a^-1   # Cong, nhan, nghich dao
Out[101]:
(1, 1, 5)

4. Tạo và kiểm tra vành¶

In [102]:
R = Integers(12)        # Tao mot Z/12Z
R(5) * R(7)             # Phep nhan trong vanh
R(5).is_unit()          # Kiem tra phan tu co nghich dao
Out[102]:
True

5. Kiểm tra tính chất đại số¶

In [104]:
f = x^3 + x + 1
f.is_irreducible()      # Kiem tra da thuc co nguyen to khong
f.factor()              # Phan tich thanh nhan tu
Out[104]:
x^3 + x + 1

Tổ hợp, xác suất và logic trong SageMath¶

SageMath cung cấp các công cụ tính toán tổ hợp, mô phỏng xác suất, và biểu thức logic.

1. Tính toán tổ hợp: tổ hợp, chỉnh hợp, giai thừa¶

In [108]:
factorial(5)        # Giai thua 5
Out[108]:
120
In [107]:
binomial(5, 2)      # To hop chap 2 cua 5
Out[107]:
10
In [109]:
factorial(5)/factorial(5 - 2)  # Chinh hop chap 2 cua 5
Out[109]:
20

2. Mô phỏng xác suất rời rạc¶

In [111]:
X = [1, 2, 3]
P = [0.2, 0.5, 0.3]
expectation = sum(x * p for x, p in zip(X, P))        # Ky vong
variance = sum((x - expectation)^2 * p for x, p in zip(X, P))  # Phuong sai
expectation, variance
Out[111]:
(2.10000000000000, 0.490000000000000)

3. Biến ngẫu nhiên: phân phối nhị thức¶

In [112]:
n = 10
p = 0.3
binomial_probs = [binomial(n, k) * p^k * (1 - p)^(n - k) for k in range(n + 1)]
bar_chart(binomial_probs, width=0.6, title='Phan phoi nhi thuc', axes=True)
Out[112]:
No description has been provided for this image

4. Biểu thức logic và mệnh đề¶

In [ ]:
var('P Q')
(P & Q).simplify_logic()     # P and Q
(P | ~Q).simplify_logic()    # P or not Q
(P.implies(Q)).truth_table()  # Bang chan tri

5. Tập hợp và mệnh đề định lượng¶

In [114]:
A = Set([1, 2, 3])
B = Set([3, 4, 5])
A.union(B), A.intersection(B), A.difference(B)
Out[114]:
({1, 2, 3, 4, 5}, {3}, {1, 2})

Chuỗi số học trong SageMath¶

SageMath cho phép tính tổng, kiểm tra hội tụ và làm việc với chuỗi vô hạn, chuỗi lũy thừa, chuỗi Taylor, Fourier.

1. Tính tổng của chuỗi số học hữu hạn¶

In [115]:
sum(k for k in range(1, 11))  # Tong 1 + 2 + ... + 10
Out[115]:
55

2. Tính tổng chuỗi vô hạn¶

In [117]:
var('n p')
assume(p > 1)
f = 1 / n^p
sum(f, n, 1, oo)     # Chuoi zeta: hoi tu voi p > 1
Out[117]:
sum(1/(n^p), n, 1, +Infinity)

3. Khai triển chuỗi Taylor¶

In [118]:
var('x')
f = sin(x)
f.taylor(x, 0, 5)   # Khai trien Taylor cap 5 tai x = 0
Out[118]:
1/120*x^5 - 1/6*x^3 + x

4. Khai triển chuỗi Maclaurin¶

In [119]:
exp(x).taylor(x, 0, 6)  # Maclaurin la truong hop Taylor tai 0
Out[119]:
1/720*x^6 + 1/120*x^5 + 1/24*x^4 + 1/6*x^3 + 1/2*x^2 + x + 1

5. Chuỗi Fourier cơ bản (với hàm tuần hoàn)¶

In [ ]:
t = var('t')
f = piecewise([[(0, pi), t], [(pi, 2*pi), 0]])  # Ham don gian
fourier_series = f.fourier_series_partial_sum(n=5, var=t, period=2*pi)
plot(fourier_series, (t, 0, 2*pi), color='red', legend_label='Fourier sum')

6. Kiểm tra hội tụ chuỗi¶

In [ ]:
sum(1/n^2, n, 1, oo).is_convergent()  # True
sum(1/n, n, 1, oo).is_convergent()   # False

Tính năng nâng cao trong SageMath¶

SageMath không chỉ hỗ trợ các phép toán cơ bản mà còn tích hợp các công cụ mạnh mẽ cho nghiên cứu và mô phỏng toán học nâng cao: lập trình, tính toán khoa học, tối ưu hóa, giao tiếp với phần mềm khác,...

1. Lập trình trong SageMath (dùng Python)¶

In [124]:
def f(x):
    return x^2 + 2*x + 1

[f(n) for n in range(5)]  # Tra ve danh sach gia tri cua f(n)
Out[124]:
[1, 4, 9, 16, 25]

2. Viết vòng lặp và điều kiện¶

In [125]:
for i in range(1, 6):
    if i % 2 == 0:
        print(f"{i} la so chan")
2 la so chan
4 la so chan

3. Tính toán song song¶

In [126]:
@parallel
def g(n):
    return n^2

list(g(n) for n in range(5))  # Chay song song cac gia tri
Out[126]:
[0, 1, 4, 9, 16]

4. Tối ưu hóa¶

In [ ]:
var('x y')
f = (x - 2)^2 + (y + 3)^2
minimize = find_minimum_on_interval(lambda t: (t - 2)^2, 0, 5)
minimize

5. Giải bài toán quy hoạch tuyến tính¶

In [128]:
from sage.numerical.mip import MixedIntegerLinearProgram

p = MixedIntegerLinearProgram(maximization=True)
x = p.new_variable()
p.set_objective(3*x[0] + 2*x[1])
p.add_constraint(x[0] + x[1] <= 4)
p.add_constraint(x[0] >= 0)
p.add_constraint(x[1] >= 0)
p.solve(), p.get_values(x)
Out[128]:
(12.0, {0: 4.0, 1: -0.0})

6. Kết nối với phần mềm khác (R, Maxima, Octave, GAP,...)¶

In [ ]:
r.eval('mean(c(1, 2, 3, 4, 5))')       # Goi R de tinh trung binh
gap.eval('Size(SymmetricGroup(3))')   # Goi GAP

7. Nhúng mã Latex hoặc biểu diễn đẹp với show()¶

In [130]:
var('x')
f = x^2 + 2*x + 1
show(f.factor())
\(\displaystyle {\left(x + 1\right)}^{2}\)

8. Xuất đồ thị hoặc dữ liệu¶

In [132]:
plot(sin(x), (x, 0, 2*pi)).save("sin_graph.png")  # Luu do thi ra file PNG